﻿/*
  --============================================================================================
  --============================================================================================
  -- Fichier          :	MDetailsPV.cs
  -- Objet			  :	Object métier adapté de la BDD PV_DETAIL
  -- Auteur			  :	S. Le Gouellec
  -- Date de création : 07/2014
  --                              :
  --                              :
  -- Notes spéciales		  :
  -- Historique			  :
  ----------------------------------------------------------------------------------------------
  -- |     Code    |  Vers. |   Date   | Auteur	|                  Description
  -- |  Dem/inc/pr |  	    |          |        |         
  -- -------------------------------------------------------------------------------------------
  -- |             |   1.0  | 07/2014  |  SLE	| Création
  -- |	           |	    |	       |        |
  --============================================================================================
  --============================================================================================
*/

using Models;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ModelEntities.Adapter
{
    /// <summary>
    /// Classe métier représentant un détail d'un PV.
    /// Classe permettant d'encapsuler une instance de PV_DETAIL qui est mappé directement avec la BDD
    /// </summary>
    public class MDetailsPV : ModelPV
    {
        #region Attribut(s)

        /// <summary>
        /// Contenu du métier : En relation avec l'objet mappé en BDD
        /// </summary>
        private PV_DETAIL contenu;

        #endregion

        #region Propriété(s)

        /// <summary>
        /// Numéro de PV
        /// </summary>
        public string NoPV 
        {
            get
            {
                return contenu.NO_PV;
            }
            set
            {
                contenu.NO_PV = value;
                OnPropertyChanged("NoPV");
            }
        }

        /// <summary>
        /// Date d'édition du PV
        /// </summary>
        public DateTime DateEdition
        {
            get
            {
                return contenu.DATE_EDITION;
            }
            set
            {
                contenu.DATE_EDITION = value;
                OnPropertyChanged("DateEdition");
            }
        }

        /// <summary>
        /// Numéro de version du PV
        /// </summary>
        public string Version
        {
            get
            {
                return contenu.VERSION;
            }
            set
            {
                contenu.VERSION = value;
                OnPropertyChanged("DateEdition");
            }
        }

        /// <summary>
        /// Nombre de page du PV
        /// </summary>
        public short? NoPage
        {
            get
            {
                return contenu.NO_PAGE;
            }
            set
            {
                contenu.NO_PAGE = Convert.ToInt16(value);
                OnPropertyChanged("NoPage");
            }
        }

        /// <summary>
        /// Code de l'instruction
        /// </summary>
        public string CodeInstruction
        {
            get
            {
                return contenu.CODE_INSTRUCTION;
            }
            set
            {
                contenu.CODE_INSTRUCTION = value;
                OnPropertyChanged("CodeInstruction");
            }
        }

        /// <summary>
        /// Numéro de ligne
        /// </summary>
        public string NoLigne
        {
            get
            {
                return contenu.NO_LIGNE;
            }
            set
            {
                contenu.NO_LIGNE = value;
                OnPropertyChanged("NoLigne");
            }
        }

        /// <summary>
        /// Libellé de l'instruction
        /// </summary>
        public string LibelleInstruction
        {
            get
            {
                return contenu.LIBELLE_INSTRUCTION;
            }
            set
            {
                contenu.LIBELLE_INSTRUCTION = value;
                OnPropertyChanged("LibelleInstruction");
            }
        }

        /// <summary>
        /// Retourne le PV de ce détail
        /// </summary>
        public MEntetePV PV
        {
            get
            {
                return new MEntetePV(contenu.PV_ENTETE);
            }
        }

        #endregion

        #region Constructeur(s)

        /// <summary>
        /// Constructeur vide
        /// </summary>
        public MDetailsPV()
        {
            setContenu(null);
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="detailPV"></param>
        public MDetailsPV(PV_DETAIL detailPV)
        {
            setContenu(detailPV);
        }

        #endregion

        #region Méthode(s)

        /// <summary>
        /// Permet de setter le contenu de cet objet métier de l'application
        /// </summary>
        /// <param name="contenu">Contenu, doit être un PV_DETAIL pour que l'objet arrive à encapsuler, sinon initiliaze le contenu avec une nouvelle instance</param>
        public void setContenu(object contenu)
        {
            PV_DETAIL pvDetail = contenu as PV_DETAIL;
            this.contenu = pvDetail == null ? new PV_DETAIL() : pvDetail;
        }

        #endregion

        #region Implements INotifyPropertyChanged

        /** Permet de notifier les élements grapghiques qui sont bindés dessus, en cas de modification **/
        public event PropertyChangedEventHandler PropertyChanged;
        private void OnPropertyChanged(String info)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null)
            {
                handler(this, new PropertyChangedEventArgs(info));
            }
        }

        #endregion
    }
}
